package com.momo.rabbitmq.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.HeadersExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;

@Configuration
public class HeaderConfig {

    @Bean
    Queue ageQueue(){
        return new Queue("queue_age");
    }

    @Bean
    Queue nameQueue(){
        return new Queue("queue_name");
    }

    @Bean
    HeadersExchange headersExchange(){
        return new HeadersExchange("momo_header");
    }

    /*
     *  这里区分whereAny 和 where 的区别 在于 如果我们要强调匹配中value值多条件匹配的时候使用
     *  这里区分whereAny 如果这判断是否mo
     */
    @Bean
    Binding bindingAge(){
        HashMap<String, Object> map = new HashMap<>();
        map.put("age",99);
        /**
         * 这里表示我需要路由的头信息中需要有age标识并且需要匹配
         */
        return BindingBuilder.bind(ageQueue()).to(headersExchange()).whereAny(map).match();
    }

    @Bean
    Binding bindingName(){
        /**
         * 这指的是头信息中是如果存在name属性的那么就放当道这个队列中去
         */
        return BindingBuilder.bind(nameQueue()).to(headersExchange()).where("name").exists();
    }
}
